16. 训练到底需要多少数据?

当完成评估(Evaluation)和误差分析(Error Analysis)后,

接下来通常会进入整个项目中最耗时的阶段:

数据修复(Data Iteration)

很多团队最终花费的大部分时间不是训练模型,而是:

发现问题
→ 修改数据
→ 重新训练
→ 重新评估
→ 再修改数据

不断循环。


一个常见误区

很多人会问:

训练一个大模型需要多少数据?

实际上这个问题没有固定答案。

更准确的问题应该是:

当前模型距离目标能力还有多远?

因为:

所需数据量与预训练模型已有能力强相关。


数据需求与已有能力的关系

假设目标:

让模型通过微积分考试

情况1:模型已经会微积分

例如 GPT-4、DeepSeek-R1 等。

此时训练目标可能只是:

考试格式
答题风格
输出要求

可能只需要:

20~100条高质量样本

即可看到明显效果。


情况2:模型会数学但不会微积分

此时需要:

极限
导数
积分
泰勒展开

相关训练数据。

可能需要:

几千到几万条样本

情况3:模型本身数学能力很弱

此时问题已经不是微调格式。

而是:

先学习数学
再学习微积分
最后学习考试

可能需要:

数十万甚至更多样本

一个重要原则

graph TD

A[目标能力]

--> B[模型已有能力]

B --> C[能力差距]

C --> D[决定数据规模]

因此:

数据量不是由任务决定,而是由能力差距决定。


预训练阶段的数据规模

预训练与后训练完全不同。


Chinchilla Scaling Law

2022年 DeepMind 的 Chinchilla 论文提出:

模型参数量与训练Token数量应保持合理比例。

经验公式:

1个参数
≈
20个训练Token

例如:

模型规模 推荐Token
1B 20B
7B 140B
10B 200B
70B 1.4T

为什么需要这么多数据

预训练需要学习:

本质上是在学习:

整个互联网

GPT-3 的例子

GPT-3(175B)论文公开数据显示:

训练数据规模约:

300B Tokens

级别。

预训练阶段:

数据规模决定模型上限。


后训练阶段的数据规模

到了 SFT 和 RL 阶段。

情况发生变化:

规模 ↓
质量 ↑

ChatGPT 的经典案例

OpenAI 在 InstructGPT 论文中公开:

人工标注数据规模:

约13000条高质量指令

量级。

远小于预训练。

但效果提升巨大。


为什么后训练更关注质量

例如:

下面两种数据。


方案A:

10000条AI生成数据

方案B:

100条专家编写数据

很多时候:

100条专家数据

效果更好。

因为:

后训练是在学习行为,而不是学习知识。


数据规模增长曲线

模型能力不会随着数据无限增长。

通常表现为:

graph LR

A[100条]
--> B[1000条]

B --> C[10000条]

C --> D[100000条]

D --> E[趋于饱和]

更准确地说:前期收益巨大。后期收益逐渐减少。

这称为:

Data Scaling Saturation(数据饱和)


先小规模实验

工业界通常不会一开始准备:

100万条数据

而是:

100条
↓
1000条
↓
10000条

逐步扩大。


推荐的数据迭代流程

graph TD

A[准备100条数据]

--> B[LoRA训练]

B --> C[评估]

C --> D[误差分析]

D --> E[补充数据]

E --> F[重新训练]

F --> C

为什么推荐 LoRA

LoRA 最大优势:

成本低
训练快
迭代快

在数据探索阶段:

通常建议:

LoRA
→ 验证方向
→ 再决定是否全量微调

数据多样性的重要性

很多数据集失败的原因不是数量不足。

而是:

表达方式太单一

例如:

训练:

北京是中国首都吗?

1000次。


测试:

中国的首都在哪?

模型不会。


问题不是数量。

而是:

缺乏表达多样性

数据覆盖比重复更重要

应该覆盖:

不同语气
不同场景
不同长度
不同措辞

例如:

中国首都是什么?
北京是哪个国家的首都?
中国行政中心在哪里?

RL阶段的数据增长

强化学习也类似。

通常流程:

graph TD

A[1000个Prompt]

--> B[RL训练]

B --> C[评估]

C --> D[发现问题]

D --> E[增加Prompt]

E --> F[继续RL]

而不是:

一次收集100万条Prompt

如何持续添加针对性样本

这是实际项目中最重要的技巧。


假设评估发现:

分数计算错误

不要重新生成全部数据。

而是:

新增:

百分比计算
折扣计算
税率计算

相关数据。


形成:

graph TD

A[评估]

--> B[发现错误]

B --> C[针对性收集数据]

C --> D[训练]

D --> E[重新评估]

这就是现代大模型训练的核心闭环。


关于 Think 数据需要多少?

很多人会问:

需要多少CoT数据?

实际上:

没有固定数字。

更重要的是:

Think数据占比

一个推荐方案

支持两种模式:


普通回答

input:
问题

output:
回答

推理回答

input:
问题 <use_thinking>

output:
<think>
推理过程
</think>

回答

为什么增加 use_thinking

这样模型可以学会:

是否需要思考

而不是:

永远输出Think

推理数据比例建议

经验上:

场景 Think占比
通用聊天 10%~20%
助手模型 20%~40%
数学模型 40%~60%
推理模型 60%~90%

例如:

DeepSeek-R1、

OpenAI o系列、

Claude Reasoning

本质上都包含大量推理数据和推理奖励。


数据规模经验法则

目标 推荐起步数据
风格模仿 20~100
指令跟随 100~1000
特定任务 1000~10000
新领域能力 1万~10万
新知识体系 10万+
预训练 百亿~万亿Token

一句话总结

训练需要多少数据,并不取决于任务本身,而取决于预训练模型距离目标能力还有多远。

因此最佳实践通常是:

先用 LoRA + 少量高质量数据验证方向,再通过评估和误差分析持续增加针对性样本,而不是一开始就准备海量数据。